package com.zrrd.aaa;

/**
 * @author WanJl
 * @version 1.0
 * @title OrderReository
 * @description
 * @create 2024/8/28
 */

import java.util.HashMap;
import java.util.TreeMap;
/**
 * 有一批订单(订单号和订单价格)录入系统
 * 运行过程中可以执行以下操作：添加订单、删除订单、修改订单价格（订单号不存在修改失败）、计算
 * 价格、根据订单号获取价格
 * 实时计算所有订单中当前的最大价格、最小价格和平均价格
 * 请尽可能地降低复杂度
 */
public class OrderReository {
    /**
     * 请实现以下未实现的方法
     */
    private HashMap<Integer, Integer> orders; // 存储订单号和价格
    private TreeMap<Integer, Integer> priceCounts; // 存储价格和价格出现的次数
    private int totalPrice; // 总价
    private int orderCount; // 订单数量

    //构造方法
    public OrderReository() {
        orders = new HashMap<>();//初始化订单集合
        priceCounts = new TreeMap<>();//初始化价格集合
        totalPrice = 0;//初始化总价
        orderCount = 0;//初始化订单数量
    }

    // 添加订单
    public void add(int id, int price) {
        if (orders.containsKey(id)) {
            return; // 已存在的订单不重复添加
        }
        orders.put(id, price);
        priceCounts.put(price, priceCounts.getOrDefault(price, 0) + 1);
        totalPrice += price;
        orderCount++;
    }

    // 移除订单
    public void remove(int id){
        if (!orders.containsKey(id)) {
            return; // 不存在的订单无法删除
        }
        int price = orders.remove(id);
        int count = priceCounts.get(price);
        if (count == 1) {
            priceCounts.remove(price);
        } else {
            priceCounts.put(price, count - 1);
        }
        totalPrice -= price;
        orderCount--;
    }

    // 更改订单
    public void modify(int id,int newPrice) {
        if (!orders.containsKey(id)) {
            return; // 不存在的订单无法修改
        }
        int oldPrice = orders.get(id);
        orders.put(id, newPrice);

        // 更新价格计数
        int oldCount = priceCounts.get(oldPrice);
        if (oldCount == 1) {
            priceCounts.remove(oldPrice);
        } else {
            priceCounts.put(oldPrice, oldCount - 1);
        }
        priceCounts.put(newPrice, priceCounts.getOrDefault(newPrice, 0) + 1);

        // 更新总价
        totalPrice = totalPrice - oldPrice + newPrice;
    }

    // 获取订单价格
    public int getPrice(int id) {
        return orders.getOrDefault(id, -1); // 返回订单价格，不存在返回-1
    }

    // 最低价格
    public int minPrice() {
        return priceCounts.isEmpty() ? -1 : priceCounts.firstKey(); // TreeMap的第一个键即为最小价格
    }

    // 最高价格
    public int maxPrice() {
        return priceCounts.isEmpty() ? -1 : priceCounts.lastKey(); // TreeMap的最后一个键即为最大价格

    }

    // 平均价格a
    public int avgPrice() {
        return orderCount == 0 ? 0 : totalPrice / orderCount; // 平均价格
    }

}










